//package com.bff.gaia.runtime.maqy.service;
//
//import com.google.common.io.LineReader;
//
//import java.io.File;
//import java.io.FileReader;
//import java.util.Timer;
//import java.util.TimerTask;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
//
//public class NetStatRetriveService implements NetService {
//	public static final int STAT_NUM = 2; // 保存数目
//	public static final int INTERVAL = 5 * 1000; // 读取间隔
//
//	/** [0]-old status, [1]-new status */
//	private static NetStat[] latestStats = new NetStat[STAT_NUM];
//
//	private static NetStatReader netStatReader;
//
//	// 读取相关配置
//	private File devFile = new File("/proc/net/dev");
//	private String interName = "eno1";
//
//	public NetStatRetriveService() {
//
//	}
//
//	public NetStatRetriveService(String interName) {
//		this.interName = interName;
//	}
//
//	public NetStatRetriveService(int pid) {
//		this.devFile = new File(String.format("/proc/%d/net/dev", pid));
//	}
//
//	public NetStatRetriveService(String interName, int pid) {
//		this(pid);
//		this.interName = interName;
//	}
//
//	@Override
//	public void start() throws Exception{
//		checkDevFile();
//
//		if (NetStatRetriveService.netStatReader == null) {
//			initNetStatReader();
//		}
//
//		Timer timer = new Timer();
//		timer.scheduleAtFixedRate(new TimerTask() {
//			@Override
//			public void run() {
//				NetStatRetriveService.netStatReader.read();
//			}
//		}, 0, NetStatRetriveService.INTERVAL);
//	}
//
//	@Override
//	public void stop() {
//
//	}
//
//	public String getDevFilePath() {
//		return devFile.getPath();
//	}
//
//	public String getInterName() {
//		return interName;
//	}
//
//	private void checkDevFile() throws Exception{
//		if (!this.devFile.exists()) {
//			throw new Exception(String.format("NetStatRetriveService start faild, dev file '%s' does not exists!", this.devFile.getPath()));
//		}
//		if (!this.devFile.canRead()) {
//			throw new Exception(String.format("NetStatRetriveService start faild, dev file '%s' can not read! Please check permission.", this.devFile.getPath()));
//		}
//		if (!this.devFile.isFile()) {
//			throw new Exception(String.format("NetStatRetriveService start faild, dev file '%s' is dictionary!", this.devFile.getPath()));
//		}
//	}
//
//	public static NetStat[] getLatestStats() throws Exception {
//		if (latestStats == null || latestStats[NetStatRetriveService.STAT_NUM - 2] == null || latestStats[NetStatRetriveService.STAT_NUM - 1] == null) {
//			throw new Exception("Latest two statuses are not filled.");
//		}
//
//		return latestStats;
//	}
//
//	private void initNetStatReader() {
//		NetStatRetriveService.netStatReader = new NetStatReader(this.devFile, this.interName);
//	}
//
//	private class NetStatReader {
//
//		private File devFile;
//		private String interName;
//
//		private Pattern pattern =
//			// Interface    |Receive                                                    |Transmit
//			// Name     	|bytes packets errs drops fifo frame compressed multicast	|bytes packets errs drops fifo colls carrier compressed
//			Pattern.compile("^ *([A-Za-z]+[0-9]*):\\D*(\\d+)\\D+(\\d+)\\D+(\\d+)\\D+(\\d+)\\D+\\d+\\D+\\d+\\D+\\d+\\D+\\d+\\D+(\\d+)\\D+(\\d+)\\D+(\\d+)\\D+(\\d+)\\D+\\d+\\D+\\d+\\D+\\d+\\D+\\d+.*");
//
//		NetStatReader(File devFile, String interName) {
//			this.devFile = devFile;
//			this.interName = interName;
//		}
//
//		public void read() {
//			try {
//				LineReader lineReader = new LineReader(new FileReader(this.devFile));
//				String line;
//
//				while ((line = lineReader.readLine()) != null) {
//					Matcher matcher = pattern.matcher(line);
//					if (matcher.matches()) {
//						String inter = matcher.group(1);
//						if (inter.matches(this.interName)) {
//							long rBytes = Long.parseLong(matcher.group(2));
//							long rPackets = Long.parseLong(matcher.group(3));
//							long rErrs = Long.parseLong(matcher.group(4));
//							long rDrop = Long.parseLong(matcher.group(5));
//
//							long tBytes = Long.parseLong(matcher.group(6));
//							long tPackets = Long.parseLong(matcher.group(7));
//							long tErrs = Long.parseLong(matcher.group(8));
//							long tDrop = Long.parseLong(matcher.group(9));
//
//							NetStat netStat = new NetStat(rBytes, rPackets, rErrs, rDrop, tBytes, tPackets, tErrs, tDrop);
//							for (int i = 0; i < NetStatRetriveService.STAT_NUM - 1; i++) {
//								NetStatRetriveService.latestStats[i] = NetStatRetriveService.latestStats[i + 1];
//							}
//							NetStatRetriveService.latestStats[NetStatRetriveService.STAT_NUM - 1] = netStat;
//
//							break;
//						}
//					}
//				}
//			} catch (Exception e) {
//				e.printStackTrace();
//			}
//		}
//	}
//}